import axios from "axios";
import { BASE_URL } from "@/constants";
import { PAGE_PATH } from "@/constants/url";
import { auth } from "./Auth";
import router from "@/router";
import { Toast } from "vant";

//, PAGE_PATH, USER_SETTING_TOKEN
// import router from "@/router";
// import { Toast } from "vant";

// axios创建一个新的实例- 正规的方式
// 单例模式- 假如一个项目需要向四个域名发送请求
// 面向对象模式

// const instance = axios.create({
//   baseURL: BASE_URL, // 设置基础地址
//   timeout: 10000,
// });

const instance = axios.create({
  baseURL: BASE_URL,
  timeout: 10000,
});

// 添加请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 对请求数据做点什么
    let token = localStorage.getItem("token") || "";
    token && (config.headers.Authorization = `Bearer ${token}`);
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么
    return response;
  },
  (error) => {
    console.log(error.response);
    // 对响应错误做点什么
    if (error.response?.status === 400) {
      Toast("请求参数异常");
    }
    if (error.response?.status === 401) {
      Toast("登录已过期");
      auth.removeUser();
      router.replace(PAGE_PATH.LOGIN_PAGE);
    }
    if (error.response?.status === 404) {
      Toast("资源找不到");
    }
    return Promise.reject(error);
  }
);

export class RequestAxios {
  static get(url, params) {
    return instance.get(url, { params });
  }

  static delete(url, data) {
    return instance.delete(url, { data });
  }

  static post(url, data) {
    return instance.post(url, data);
  }

  static put(url, data) {
    return instance.put(url, data);
  }
}
